package com.sugar.subscribe.course.module.business.service.withdrawrecord;

import java.math.BigDecimal;
import java.util.*;
import javax.validation.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

import com.sugar.subscribe.course.module.business.controller.admin.withdrawrecord.vo.*;
import com.sugar.subscribe.course.module.business.controller.app.withdrawrecord.vo.AppWithdrawRecordRespVO;
import com.sugar.subscribe.course.module.business.dal.dataobject.withdrawrecord.WithdrawRecordDO;
import com.sugar.subscribe.course.framework.common.pojo.PageResult;
import com.sugar.subscribe.course.framework.common.pojo.PageParam;

/**
 * 提现记录 Service 接口
 *
 * @author Ysugar
 */
public interface WithdrawRecordService {

    void updateWithdrawRecord(WithdrawRecordSaveReqVO updateReqVO);

    /**
     * 删除提现记录
     *
     * @param id 编号
     */
    void deleteWithdrawRecord(Long id);

    /**
    * 批量删除提现记录
    *
    * @param ids 编号
    */
    void deleteWithdrawRecordListByIds(List<Long> ids);

    /**
     * 获得提现记录
     *
     * @param id 编号
     * @return 提现记录
     */
    WithdrawRecordDO getWithdrawRecord(Long id);

    /**
     * 获得提现记录分页
     *
     * @param pageReqVO 分页查询
     * @return 提现记录分页
     */
    PageResult<WithdrawRecordRespVO> getWithdrawRecordPage(WithdrawRecordPageReqVO pageReqVO);

    // ======================================== 其它接口 ========================================

    void updateTransferOrder(Long merchantTransferId, Long payTransferId);

    // ======================================== APP 接口 ========================================

    void appUserWithdraw(BigDecimal amount, Long coachId);

    PageResult<AppWithdrawRecordRespVO> appGetWithdrawRecordPage(PageParam pageParam, Long coachId);
}